using System;
using System.Collections.Generic;
using IQIGame.Onigao.Framework.Serialization;

namespace IQIGame.Onigao.GamePlay
{
    public partial class LevelServiceExecutionCustom_GenerateEntity : LevelServiceCustomConfig
    {
        public int cloneByType;
        public int configID;
        public int interactType;
        public Int3 pos;
        public int bornNearPlayer;
        public int rotationY;
        public List<ushort> tags;
    }

    public partial class LevelServiceExecutionCustom_RemoveEntity : LevelServiceCustomConfig
    {
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
    }

    public partial class LevelServiceExecutionCustom_ShowSpeechBubble : LevelServiceCustomConfig
    {
        // 实体tag（为0表示当前实体，只支持单个）
        public EditorLevelServiceDynamicConfig tag;
        // 气泡groupId
        public int groupID;
    }

    public partial class LevelServiceExecutionCustom_Teleport : LevelServiceCustomConfig
    {
        public int regionCid;
        // 传送门唯一tag（-1为手动指定传送位置）
        public int portalTagOrMcid;
        // 传送后是否改变旋转
        public bool isSetRotation;
        // 传送到目的地后的rotationY
        public int rotationY;
        // 坐标信息
        public Int3 position;
    }

    public partial class LevelServiceExecutionCustom_ChangeExecutionCounts : LevelServiceCustomConfig
    {
        // 实体tag（填0表示自己）
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
        // 修改类型（0：增量，1：全量）
        public int type;
        // 参数索引index，对应静态配置里的索引
        public int index;
        // 目标值
        public int value;
    }

    public partial class LevelServiceExecutionCustom_EnableServiceUnit : LevelServiceCustomConfig
    {
        public EditorLevelServiceDynamicConfig tagOrMcid;
        public bool enable;
        public int service;
        public int serviceUnitIndex;
    }

    public partial class LevelServiceExecutionCustom_ChangeLevelParams : LevelServiceCustomConfig
    {
        // type(1全量，2增量)
        public int type;
        public int key;
        public int value;
    }

    public partial class LevelServiceExecutionCustom_AutoNavigation : LevelServiceCustomConfig
    {
        // 实体tag（填0表示自己，只支持单个）
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 导航过程中是否等待英雄
        public bool needWaitHero;
        public List<Int3> pos;
    }

    [Obsolete]
    public partial class LevelServiceExecutionCustom_AddOrDeleteService : LevelServiceCustomConfig
    {
        // 实体tag（填0表示自己）
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 是增加还是删除（0：删除，1：增加，2：删除所属服务）
        public int type;
        public List<int> services;
    }

    public partial class LevelServiceExecutionCustom_ChangeService : LevelServiceCustomConfig
    {
        // 实体tag（填0表示自己）
        public EditorLevelServiceDynamicConfig tagOrMcid;
        public List<int> services;
    }

    public partial class LevelServiceExecutionCustom_Battle : LevelServiceCustomConfig
    {
        public EditorLevelServiceDynamicConfig monsterTeam;
        public int battleType;
    }

    public partial class LevelServiceExecutionCustom_FollowHero : LevelServiceCustomConfig
    {
        // 跟随的实体tag(0表示自己)
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 开始跟随，停止跟随
        public bool isFollow;
        // 停止时是否设置rotationY
        public bool isSetRotation;
        public int stopRotationY;
        // 停止跟随后的目标点(可不填)
        public Int3 pos;
    }

    public partial class LevelServiceExecutionCustom_ChangeEntityActivation : LevelServiceCustomConfig
    {
        // tag（0表示自己）
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
        // 是否激活（0：不激活，1：激活）
        public bool isActive;
        // 激活时默认动作
        public int animActionId;
        // 是否改变y轴旋转
        public bool isSetRotation;
        // 激活时的y轴旋转
        public int rotationY;
        public Int3 pos;
    }

    public partial class LevelServiceExecutionCustom_UseElevtor : LevelServiceCustomConfig
    {
        // 电梯tag（0表示当前实体）
        public EditorLevelServiceDynamicConfig tagOrMcid;
    }

    public partial class LevelServiceExecutionCustom_ChangeInteractType : LevelServiceCustomConfig
    {
        // 实体tag（填0表示自己）
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
        // 交互类型
        public byte interactType;
    }

    public partial class LevelServiceExecutionCustom_SwitchElevatorFloor : LevelServiceCustomConfig
    {
        // tag（0表示自己，注意tag对应的实体必须是电梯）
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 交互类型
        public List<LevelServiceCustom_FloorState> floors;
    }

    [Serializable]
    public partial class LevelServiceCustom_FloorState : LevelServiceCustomConfig
    {
        public int floor;
        public int state;
    }

    public partial class LevelServiceExecutionCustom_SetObstacleActivation : LevelServiceCustomConfig
    {
        // tag(填0表示自己)
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
        // 是否激活
        public bool isObstacleActive;
    }

    public partial class LevelServiceExecutionCustom_PlayEntityAnimation : LevelServiceCustomConfig
    {
        // tag(填0表示自己)
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
        // 动画表id
        public int actionID;
    }

    public partial class LevelServiceExecutionCustom_CameraMotion : LevelServiceCustomConfig
    {
        // 切屏表id(LevelScreenSwitch.Id)
        public int screenSwitchCid;
    }

    public partial class LevelServiceExecutionCustom_UpdateTimeEnvShow : LevelServiceCustomConfig
    {
        public int timeHour;
    }

    public partial class LevelServiceExecutionCustom_ChangeSceneEffect : LevelServiceCustomConfig
    {
        // 实体tag（0表示自己，-1表示不依赖实体）
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 特效id
        public int effectCid;
        // 是否是添加
        public bool isAdd;
    }

    public partial class LevelServiceExecutionCustom_CallElevator : LevelServiceCustomConfig
    {
        // 电梯tag
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 类型（1全量，2增量）
        public int type;
        // 全量：目标楼层（-1代表电梯门所在楼层，但限定电梯门触发），增量（目标楼层=当前楼层+增量）
        public int param;
    }

    public partial class LevelServiceExecutionCustom_ApplyRoutineAct : LevelServiceCustomConfig
    {
        // tag
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // LevelRoutineAct.Id
        public int actId;
    }

    public partial class LevelServiceExecutionCustom_PushEntityFourWay : LevelServiceCustomConfig
    {
        // 实体tag（0代表自己）
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 最大距离（途中遇到其他实体会停下）
        public int maxDistance;
    }

    public partial class LevelServiceExecutionCustom_ResetEntity : LevelServiceCustomConfig
    {
        // 实体tag(0表示自己)
        public List<EditorLevelServiceDynamicConfig> tagOrMcid;
    }

    public partial class LevelServiceExecutionCustom_ActiveCheckPoint : LevelServiceCustomConfig
    {
        // 存档点tag(0表示自己)
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 是否激活
        public bool isToActive;
    }

    public partial class LevelServiceExecutionCustom_AddOrRemoveBuff : LevelServiceCustomConfig
    {
        // buff目标：（1.玩家，2.所有队员，3.队长，4：实体）
        public int hostType;
        // 操作类型（1.添加，2.移除）
        public int opType;
        // 实体tag(仅参数1位4时有效)
        public EditorLevelServiceDynamicConfig tagOrMcid;
        public List<int> buffs;
    }

    public partial class LevelServiceExecutionCustom_AddBuffStack : LevelServiceCustomConfig
    {
        // buff目标：（1.玩家，2.所有队员，3.队长，4：实体）
        public int hostType;
        // buff cid
        public int buffCid;
        // 增加层数
        public int addStack;
        // 实体tag(仅参数1位4时有效)
        public EditorLevelServiceDynamicConfig tagOrMcid;
    }

    public partial class LevelServiceExecutionCustom_RelationalCalcLevelParams : LevelServiceCustomConfig
    {
        // 模式(1:设置 2:增加 3.减少)
        public int type;
        // 可写参数ID
        public int writeParamId;
        // 可读参数ID
        public int readParamId;
    }

    public partial class LevelServiceExecutionCustom_ChangeCustomBGM : LevelServiceCustomConfig
    {
        // region cid（当前地区可填0）
        public int regionCid;
        // 音乐的Audio cid，有三种情况：（1）有值表示播放该音乐，（2）-1表示全局没有背景音乐，（3）0表示无自定义音乐，恢复默认BGM
        public int audioCid;
    }

    public partial class LevelServiceExecutionCustom_StartStoryDialog : LevelServiceCustomConfig
    {
        // 对话cid
        public int dialogCid;
        // 是否全局对话（全局对话代表所有玩家都会开启）
        public bool isGlobal;
        public int startCid;
    }

    public partial class LevelServiceExecutionCustom_ChangeEntityRotation : LevelServiceCustomConfig
    {
        // 实体tag或mcid
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // y轴旋转值
        public int rotationY;
        // 是否是增量
        public bool isIncrement;
    }

    public partial class LevelServiceExecutionCustom_LinearMoveBySpecifiedDir : LevelServiceCustomConfig
    {
        // 实体tag或mcid
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 移动距离（厘米）
        public int moveDis;
        // 朝向(厘米)
        public Int3 dir;
    }

    public partial class LevelServiceExecutionCustom_CancelDelayService : LevelServiceCustomConfig
    {
        // 定位方式（1.根据服务cid，2.根据实体tag或mcid)
        public bool isByEntity;
        // 定位用id
        public int searchId;
    }

    public partial class LevelServiceExecutionCustom_CancelNavigation : LevelServiceCustomConfig
    {
        // 实体tag或mcid
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 是否触发寻路结束的服务
        public bool isTriggerService;
        // 是否瞬移到终点
        public bool isTeleportToFinalDestination;
    }

    public partial class LevelServiceExecutionCustom_ChangeCurPlayerCamera : LevelServiceCustomConfig
    {
        // 相机id（0表示还原）
        public int cameraCid;
    }

    public partial class LevelServiceExecutionCustom_ChangeWeather : LevelServiceCustomConfig
    {
        // 天气id(0表示全局，局部id参考编辑器功能)
        public int id;
        // 天气类型(隐藏填0，显示的数值待定)
        public int type;
    }

    public partial class LevelServiceExecutionCustom_SimulateTrigger : LevelServiceCustomConfig
    {
        // 指定实体的tag或mcid
        public EditorLevelServiceDynamicConfig tagOrMcid;
        // 触发配置
        public EditorLevelServiceTriggerConfig triggerConfig;
    }

    public partial class LevelServiceExecutionCustom_Prefab : LevelServiceCustomConfig
    {
        public string key;

        /// <summary>
        /// 反序列化后赋值
        /// </summary>
        public List<EditorLevelServiceExecutionConfig> value;
    }

    public partial class LevelServiceExecutionCustom_StartItemSubmit : LevelServiceCustomConfig
    {
        public int cid;
    }

    public partial class LevelServiceExecutionCustom_Drop : LevelServiceCustomConfig
    {
        public int cid;
    }

    public partial class LevelServiceExecutionCustom_AddItem : LevelServiceCustomConfig
    {
        public List<ItemCidNumPair> items;
    }

    public partial class LevelServiceExecutionCustom_EnableQuickBar : LevelServiceCustomConfig
    {
        public bool isEnabled;
    }

    public partial class LevelServiceExecutionCustom_PlayOrStopEntityEffect : LevelServiceCustomConfig
    {
        public EditorLevelServiceDynamicConfig tagOrMcid;
        public int effectCid;
        public int bindPointCid;
        public bool isAdd;
    }

    public partial class LevelServiceExecutionCustom_AddHp : LevelServiceCustomConfig
    {
        public int targetType;
        public int addType;
        public int addValue;
        public bool isPlayHit;
    }

    public partial class LevelServiceExecutionCustom_StartMiniGame : LevelServiceCustomConfig
    {
        #region property
        public int type;
        public int cid;
        #endregion property
    }

    #region GenerateCode
    public partial class LevelServiceExecutionCustom_AcceptQuest : LevelServiceCustomConfig
    {
        #region property
        public int questCid;
        #endregion property
    }
        public partial class LevelServiceExecutionCustom_ChangeEntityAudio : LevelServiceCustomConfig
    {
# region property
            public EditorLevelServiceDynamicConfig tagOrMcid;
            public int loopAudioCid;
# endregion property
    }
    public partial class LevelServiceExecutionCustom_LeaveLevel : LevelServiceCustomConfig
    {
# region property
            public int outRegionCid;
            public int outPortalMcid;
# endregion property
    }
# endregion GenerateCode
}